This commit is contained in:
2026-07-31 11:51:56 +09:00
parent 3271693051
commit d90a25919e
20 changed files with 14370 additions and 0 deletions
+315
View File
@@ -0,0 +1,315 @@
# Docker Deployment Guide
This guide covers deploying LinkForty using Docker and Docker Compose.
## Quick Start
### Using Docker Compose (Recommended)
1. **Download the docker-compose.yml file:**
```bash
curl -O https://raw.githubusercontent.com/linkforty/core/main/docker-compose.yml
```
2. **Create a `.env` file:**
```bash
# Download the example
curl -O https://raw.githubusercontent.com/linkforty/core/main/.env.example
mv .env.example .env
# Edit with your settings
nano .env
```
3. **Start LinkForty:**
```bash
docker-compose up -d
```
4. **Access your instance:**
- API: http://localhost:3000
- Health check: http://localhost:3000/health
### Using Docker CLI
```bash
# Pull the latest image
docker pull linkforty/core:latest
# Run with required services
docker run -d \
--name linkforty \
-p 3000:3000 \
-e DATABASE_URL=postgresql://user:pass@host:5432/db \
-e REDIS_URL=redis://host:6379 \
linkforty/core:latest
```
## Configuration
### Environment Variables
| Variable | Required | Default | Description |
|----------------|----------|--------------|---------------------------------------|
| `DATABASE_URL` | Yes | - | PostgreSQL connection string |
| `REDIS_URL` | No | - | Redis connection string (recommended) |
| `PORT` | No | `3000` | Server port |
| `NODE_ENV` | No | `production` | Environment mode |
| `JWT_SECRET` | No | - | JWT signing secret |
See [.env.example](.env.example) for complete configuration options.
### Docker Compose Configuration
The `docker-compose.yml` file includes:
- **LinkForty API** - Main application server
- **PostgreSQL** - Database for persistent storage
- **Redis** - Caching layer for performance
#### Customizing Ports
Edit your `.env` file:
```env
LINKFORTY_PORT=8080 # Change API port
POSTGRES_PORT=5433 # Change Postgres port
REDIS_PORT=6380 # Change Redis port
```
#### Using Your Own Database
If you have an existing PostgreSQL or Redis instance:
```yaml
# docker-compose.yml
services:
linkforty:
image: linkforty/core:latest
environment:
DATABASE_URL: postgresql://user:pass@your-db-host:5432/linkforty
REDIS_URL: redis://your-redis-host:6379
# Remove the postgres and redis services
```
## Production Deployment
### Security Best Practices
1. **Change default passwords:**
```bash
# Generate secure random password
openssl rand -base64 32
```
2. **Use secrets for sensitive data:**
```bash
# Create a secrets file
echo "postgresql://user:$(openssl rand -base64 32)@postgres:5432/linkforty" > db_url.secret
```
```yaml
# docker-compose.yml
services:
linkforty:
secrets:
- db_url
secrets:
db_url:
file: ./db_url.secret
```
3. **Use a reverse proxy (Nginx/Traefik):**
```yaml
# Add Nginx service
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
```
### Persistent Data
Volumes are automatically created for:
- `postgres_data` - Database files
- `redis_data` - Redis persistence
**Backup your data:**
```bash
# Backup PostgreSQL
docker-compose exec postgres pg_dump -U linkforty linkforty > backup.sql
# Backup volumes
docker run --rm -v linkforty_postgres_data:/data -v $(pwd):/backup alpine \
tar czf /backup/postgres-backup.tar.gz /data
```
### Health Checks
The LinkForty container includes a built-in health check:
```bash
# Check container health
docker ps
# View health check logs
docker inspect --format='{{json .State.Health}}' linkforty | jq
```
## Versioning
### Available Tags
- `latest` - Latest stable release
- `v1.3.0` - Specific version
- `v1.3` - Latest patch of minor version
- `v1` - Latest minor of major version
- `sha-abc123` - Specific commit build
### Pinning Versions
**Recommended for production:**
```yaml
services:
linkforty:
image: linkforty/core:v1.3.0 # Pin to specific version
```
### Updating
```bash
# Pull latest version
docker-compose pull
# Restart with new version
docker-compose up -d
# View logs
docker-compose logs -f linkforty
```
## Troubleshooting
### Container won't start
1. **Check logs:**
```bash
docker-compose logs linkforty
```
2. **Verify database connection:**
```bash
docker-compose exec linkforty sh -c 'echo "SELECT 1" | psql $DATABASE_URL'
```
3. **Check health status:**
```bash
docker-compose ps
```
### Database migration issues
Run migrations manually:
```bash
docker-compose exec linkforty tsx dist/scripts/migrate.js
```
### Port already in use
Change the port mapping in `.env`:
```env
LINKFORTY_PORT=8080
```
Or use different ports in docker-compose:
```yaml
services:
linkforty:
ports:
- "8080:3000" # External:Internal
```
## Advanced Configuration
### Multi-Architecture Support
The published images support both AMD64 and ARM64:
```bash
# Automatically pulls correct architecture
docker pull linkforty/core:latest
```
### Custom Dockerfile
If you need to customize the image:
```dockerfile
FROM linkforty/core:latest
# Add custom scripts
COPY ./custom-scripts /app/scripts
# Install additional tools
RUN apk add --no-cache curl
# Custom entrypoint
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
```
### Development Mode
Build and run locally:
```bash
# Clone repository
git clone https://github.com/linkforty/core.git
cd core
# Build image
docker build -t linkforty-dev .
# Run with development settings
docker-compose -f docker-compose.yml up
```
## GitHub Actions Auto-Publishing
Images are automatically published when:
- **Tags are pushed** (e.g., `v1.3.0`) → Triggers release build
- **Main branch updated** → Updates `latest` tag
- **Pull requests** → Test build only (not published)
### Setting Up Auto-Publishing (For Maintainers)
1. Create Docker Hub access token at https://hub.docker.com/settings/security
2. Add GitHub secrets:
- Go to repository Settings → Secrets and variables → Actions
- Add `DOCKERHUB_USERNAME` (your Docker Hub username)
- Add `DOCKERHUB_TOKEN` (your access token)
3. Create a new release:
```bash
git tag v1.3.1
git push origin v1.3.1
```
4. GitHub Actions will automatically:
- Build the Docker image
- Run tests
- Push to Docker Hub
- Create GitHub release notes
## Support
- **Issues:** https://github.com/linkforty/core/issues
- **Discussions:** https://github.com/linkforty/core/discussions
- **Documentation:** https://docs.linkforty.com
## License
MIT License - see [LICENSE](LICENSE) for details