You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pixelfed/DOCKER_COMPOSE_SETUP.md

130 lines
3.5 KiB
Markdown

# Pixelfed Docker Compose Setup with serversideup/php container
This setup uses `serversideup/php:8.4-fpm-nginx` as the base image and is designed to work behind a reverse proxy like Cloudflare Tunnel, or Nginx (Proxy Manager) for HTTPS termination.
## Prerequisites
- Docker and Docker Compose installed
- A reverse proxy (e.g., Nginx Proxy Manager) for HTTPS
- Domain name
- Email Provider for sending emails
## Quick Start
1. **Clone and prepare the privledges**
```bash
git clone https://github.com/pixelfed/pixelfed
cd pixelfed
sudo chown -R www-data:www-data storage/ bootstrap/cache/
```
1. **Copy the environment file:**
```bash
cp .env.docker.example .env
```
2. **Update `.env` with your configuration:**
- Set `APP_KEY` ( generate with https://laravel-encryption-key-generator.vercel.app/ )
- Update `APP_URL`, `APP_DOMAIN`, `ADMIN_DOMAIN`, `SESSION_DOMAIN` with your domain
- Set secure database passwords for `DB_PASSWORD` and `DB_ROOT_PASSWORD`
- Configure mail settings
3. **Build container**
```bash
docker compose build
```
#### Container Build Troubleshooting ####
`open /home/username/pixelfed/storage/app/public/m/_v2/xxxxxxxxxxxxxxxxxx/xxxxxxxxxxx-xxxxxxxxxx/xxxxxxxxxxxx: permission denied` or similar might require fixing local permissions.
```bash
sudo find storage/ -type d -exec chmod 755 {} \; # set all directories to rwx by user/group
sudo find storage/ -type f -exec chmod 644 {} \; # set all files to rw by user/group
```
4. **Build and start the containers:**
```bash
docker compose up -d db redis # Bootstrap the database and Redis.
# Wait 30 seconds for them to complete first boot.
docker compose up -d
```
5. **Generate application keys (Critical for Federation) and other tasks:**
```bash
docker compose exec pixelfed php artisan instance:actor
docker compose exec pixelfed php artisan import:cities
docker compose exec pixelfed php artisan passport:keys
```
6. **Create admin user:**
```bash
docker compose exec pixelfed php artisan user:create
```
## Reverse Proxy Configuration
### Cloudflare Tunnel
1. Doco coming soon
### Nginx Proxy Manager
1. Add a new Proxy Host in Nginx Proxy Manager
2. Set the following:
- **Domain Names:** Your domain (e.g., `pixelfed.yourdomain.com`)
- **Scheme:** `http`
- **Forward Hostname/IP:** `pixelfed-app` (or the Docker host IP)
- **Forward Port:** `8080`
- **Enable:** Websockets Support, Block Common Exploits
3. Configure SSL certificate (Let's Encrypt recommended)
4. Add custom Nginx configuration if needed:
```nginx
client_max_body_size 500M;
proxy_read_timeout 300s;
```
### Manual Nginx Configuration
```nginx
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
client_max_body_size 500M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
```
## Useful Commands
```bash
# View logs
docker compose logs -f
# Run artisan commands
docker compose exec pixelfed php artisan [command]
# Access container shell
docker compose exec pixelfed bash
# Restart services
docker compose restart
# Stop services
docker compose down
# Stop and remove volumes (WARNING: deletes data)
docker compose down -v
```