This commit is contained in:
Jesús Pavón Abián 2025-06-05 00:50:56 +00:00 committed by GitHub
commit e43cb959c9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 154 additions and 16 deletions

View file

@ -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 }}

View 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 }}

View file

@ -1,6 +1,7 @@
version: '3'
services:
app:
image: writefreely
image: ghcr.io/writefreely/writefreely:latest
container_name: writefreely
volumes:
- ./data:/data

View file

@ -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
View 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'"