Merge 271539e674
into 72fa575fee
This commit is contained in:
commit
e43cb959c9
5 changed files with 154 additions and 16 deletions
|
@ -1,4 +1,4 @@
|
|||
name: Build container image, publish as GitHub-package
|
||||
name: Build container image, publish as GitHub-package (Dev)
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
|
@ -6,39 +6,37 @@ name: Build container image, publish as GitHub-package
|
|||
# documentation.
|
||||
|
||||
on:
|
||||
# Trigger the workflow on pushes to 'main' and 'develop' branches for development builds
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
# Publish semver tags as releases.
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
# Define image name based on the repository and suffix for development
|
||||
IMAGE_NAME: ${{ github.repository }}-dev
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
# Step 1: Checkout the code from the repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Set up QEMU for cross-building
|
||||
# Step 2: Set up QEMU for cross-platform builds
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3.0.0
|
||||
|
||||
# Set up Docker Buildx
|
||||
# Step 3: Set up Docker Buildx, required for multi-platform builds
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# Step 4: Log into the container registry unless it's a pull request
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
|
@ -48,23 +46,30 @@ jobs:
|
|||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Extract metadata (tags, labels) for Docker
|
||||
# Step 5: Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4.6.0
|
||||
with:
|
||||
# Image name will have a -dev suffix for development builds
|
||||
images: |
|
||||
ghcr.io/${{ github.repository }}
|
||||
ghcr.io/${{ env.IMAGE_NAME }}
|
||||
# Set 'latest' tag for the current build
|
||||
flavor: latest=true
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# Step 6: Build and push Docker development image
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker images
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
with:
|
||||
# Context is the root directory
|
||||
context: .
|
||||
# Set platforms for multi-architecture builds
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
# Push the image unless it's a pull request
|
||||
push: true
|
||||
# Apply tags from metadata
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
# Apply labels from metadata
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
78
.github/workflows/docker-publish-pro.yml
vendored
Normal file
78
.github/workflows/docker-publish-pro.yml
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
name: Build container image, publish as GitHub-package (Pro)
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
# Trigger the workflow on version tags (v*.*.*) for production builds
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
|
||||
env:
|
||||
# Use GitHub Container Registry for publishing
|
||||
REGISTRY: ghcr.io
|
||||
# Define image name based on the repository without any suffix for production
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
# Step 1: Checkout the code from the repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Step 2: Set up QEMU for cross-platform builds
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3.0.0
|
||||
|
||||
# Step 3: Set up Docker Buildx, required for multi-platform builds
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
|
||||
# Step 4: Log into the container registry unless it's a pull request
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v3.0.0
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Step 5: Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4.6.0
|
||||
with:
|
||||
# Production image name without the -dev suffix
|
||||
images: |
|
||||
ghcr.io/${{ env.IMAGE_NAME }}
|
||||
# Set 'latest' tag for the current production build
|
||||
flavor: latest=true
|
||||
|
||||
# Step 6: Build and push Docker production image
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker images
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
with:
|
||||
# Context is the root directory
|
||||
context: .
|
||||
# Use the production Dockerfile
|
||||
file: Dockerfile.prod
|
||||
# Set platforms for multi-architecture builds
|
||||
platforms: linux/amd64,linux/arm64
|
||||
# Push the image unless it's a pull request
|
||||
push: true
|
||||
# Apply tags from metadata, including 'latest' and version tag
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
# Apply labels from metadata
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
|
@ -1,6 +1,7 @@
|
|||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: writefreely
|
||||
image: ghcr.io/writefreely/writefreely:latest
|
||||
container_name: writefreely
|
||||
volumes:
|
||||
- ./data:/data
|
||||
|
|
|
@ -12,7 +12,7 @@ networks:
|
|||
services:
|
||||
writefreely-web:
|
||||
container_name: "writefreely-web"
|
||||
image: "writeas/writefreely:latest"
|
||||
image: ghcr.io/writefreely/writefreely-dev:latest
|
||||
|
||||
volumes:
|
||||
- "web-keys:/go/keys"
|
||||
|
|
54
docker_setup_prod.sh
Normal file
54
docker_setup_prod.sh
Normal file
|
@ -0,0 +1,54 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script sets up the WriteFreely application using Docker by creating a local directory
|
||||
# in the current working directory (PWD) to store Docker-related files, initializing the database,
|
||||
# and performing the initial configuration.
|
||||
|
||||
# Installation directory in the same location as the script
|
||||
INSTALL_DIR="$(pwd)/writefreely"
|
||||
|
||||
# Create the installation directory if it doesn't exist
|
||||
if [ ! -d "$INSTALL_DIR" ]; then
|
||||
echo "Creating directory at $INSTALL_DIR..."
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
fi
|
||||
|
||||
# Change to the installation directory
|
||||
cd "$INSTALL_DIR" || exit
|
||||
|
||||
# URL for the docker-compose file
|
||||
COMPOSE_URL="https://raw.githubusercontent.com/writefreely/writefreely/refs/heads/develop/docker-compose.prod.yml"
|
||||
|
||||
# Check if docker-compose.yml already exists
|
||||
if [ ! -f "docker-compose.yml" ]; then
|
||||
echo "docker-compose.yml not found. Downloading from $COMPOSE_URL..."
|
||||
|
||||
# Check if curl or wget is available and download the file
|
||||
if command -v curl &> /dev/null; then
|
||||
curl -o docker-compose.yml "$COMPOSE_URL"
|
||||
elif command -v wget &> /dev/null; then
|
||||
wget -O docker-compose.yml "$COMPOSE_URL"
|
||||
else
|
||||
echo "Error: Neither curl nor wget is installed. Please install one of them to proceed."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "docker-compose.yml already exists. Skipping download."
|
||||
fi
|
||||
|
||||
# Prompt the user to edit the docker-compose.yml file
|
||||
echo "Before continuing, you must edit the docker-compose.yml file to configure the database connection details."
|
||||
read -p "Press Enter when you have finished editing the file."
|
||||
|
||||
# Run the initial command for interactive configuration
|
||||
echo "Starting WriteFreely configuration..."
|
||||
docker compose run -it --rm app writefreely config start
|
||||
|
||||
echo "Configuration completed. Now generating keys..."
|
||||
|
||||
# Generate the required keys
|
||||
docker compose run -it --rm app writefreely keys generate
|
||||
|
||||
# Completion message with update instructions
|
||||
echo "Setup complete! You can now start WriteFreely with 'docker compose up -d'"
|
||||
echo "To update WriteFreely in the future, run: 'docker-compose down', 'docker-compose pull', and 'docker-compose up -d'"
|
Loading…
Add table
Reference in a new issue