# Lemmy Poster A Laravel application for posting articles to Lemmy platforms. ## Docker Deployment ### Building the Image ```bash docker build -t your-registry/lemmy-poster:latest . docker push your-registry/lemmy-poster:latest ``` ### Docker Compose Create a `docker-compose.yml` file: ```yaml services: app-web: image: your-registry/lemmy-poster:latest command: ["web"] ports: - "8000:8000" environment: - DB_DATABASE=${DB_DATABASE} - DB_USERNAME=${DB_USERNAME} - DB_PASSWORD=${DB_PASSWORD} - LEMMY_INSTANCE=${LEMMY_INSTANCE} - LEMMY_USERNAME=${LEMMY_USERNAME} - LEMMY_PASSWORD=${LEMMY_PASSWORD} - LEMMY_COMMUNITY=${LEMMY_COMMUNITY} depends_on: - mysql volumes: - storage_data:/var/www/html/storage/app restart: unless-stopped app-queue: image: your-registry/lemmy-poster:latest command: ["queue"] environment: - DB_DATABASE=${DB_DATABASE} - DB_USERNAME=${DB_USERNAME} - DB_PASSWORD=${DB_PASSWORD} - LEMMY_INSTANCE=${LEMMY_INSTANCE} - LEMMY_USERNAME=${LEMMY_USERNAME} - LEMMY_PASSWORD=${LEMMY_PASSWORD} - LEMMY_COMMUNITY=${LEMMY_COMMUNITY} depends_on: - mysql volumes: - storage_data:/var/www/html/storage/app restart: unless-stopped mysql: image: mysql:8.0 command: --host-cache-size=0 --innodb-use-native-aio=0 --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --log-error-verbosity=1 environment: - MYSQL_DATABASE=${DB_DATABASE} - MYSQL_USER=${DB_USERNAME} - MYSQL_PASSWORD=${DB_PASSWORD} - MYSQL_ROOT_PASSWORD=${DB_PASSWORD} - TZ=UTC volumes: - mysql_data:/var/lib/mysql restart: unless-stopped volumes: mysql_data: storage_data: ``` ### Environment Variables Create a `.env` file with: ```env # Database Settings DB_DATABASE=lemmy_poster DB_USERNAME=lemmy_user DB_PASSWORD=your-password # Lemmy Settings LEMMY_INSTANCE=your-lemmy-instance.com LEMMY_USERNAME=your-lemmy-username LEMMY_PASSWORD=your-lemmy-password LEMMY_COMMUNITY=your-target-community ``` ### Deployment 1. Build and push the image to your registry 2. Copy the docker-compose.yml to your server 3. Create the .env file with your environment variables 4. Run: `docker compose up -d` The application will automatically: - Wait for the database to be ready - Run database migrations on first startup - Start the queue worker after migrations complete - Handle race conditions between web and queue containers ### Initial Setup After deployment, the article refresh will run every hour. To trigger the initial article fetch manually: ```bash docker compose exec app-web php artisan article:refresh ``` The application will then automatically: - Fetch new articles every hour - Publish valid articles every 5 minutes - Sync community posts every 10 minutes The web interface will be available on port 8000. ### Architecture The application uses a multi-container setup: - **app-web**: Serves the Laravel web interface and handles HTTP requests - **app-queue**: Processes background jobs (article fetching, Lemmy posting) - **mysql**: Database storage for articles, logs, and application data Both app containers use the same Docker image but with different commands (`web` or `queue`). Environment variables are passed from your `.env` file to configure database access and Lemmy integration.