mirror of
https://github.com/go-micro/go-micro.git
synced 2026-04-30 19:15:24 +02:00
a5bef7af29
* Add systemd-based deployment support
- micro init --server: Initialize server to receive deployments
- Creates /opt/micro/{bin,data,config} directories
- Generates systemd template unit (micro@.service)
- Creates 'micro' system user
- micro deploy: Deploy services via SSH + systemd
- Builds linux/amd64 binaries automatically
- Copies via rsync/scp to server
- Manages services via systemctl
- Helpful error messages for common issues
- micro status --remote: Check remote service status
- micro logs --remote: Stream remote logs via journalctl
- micro stop --remote: Stop services on remote server
- Config: Added 'deploy' blocks to micro.mu for named targets
The deployment model:
- systemd is the process supervisor (battle-tested)
- SSH is the transport (standard, secure)
- No custom daemons or platforms needed
Co-authored-by: Shelley <shelley@exe.dev>
* Add deployment documentation
- docs/deployment.md: Comprehensive guide for server deployment
- README.md: Updated deployment section with full workflow
Co-authored-by: Shelley <shelley@exe.dev>
* Add deployment section to CLI documentation
Co-authored-by: Shelley <shelley@exe.dev>
* Fix systemd template escaping and rsync permission warnings
- Fix %i escaping in systemd template (was being interpreted by fmt.Sprintf)
- Handle rsync exit code 23/24 gracefully (metadata permission warnings)
- Add --omit-dir-times to rsync to avoid directory timestamp errors
Co-authored-by: Shelley <shelley@exe.dev>
* Add install script for micro CLI
Co-authored-by: Shelley <shelley@exe.dev>
* Fix non-constant format string in deploy error
Co-authored-by: Shelley <shelley@exe.dev>
---------
Co-authored-by: Shelley <shelley@exe.dev>
76 lines
1.7 KiB
Bash
Executable File
76 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install script for micro CLI
|
|
# Usage: curl -fsSL https://go-micro.dev/install.sh | sh
|
|
|
|
set -e
|
|
|
|
VERSION="${MICRO_VERSION:-latest}"
|
|
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
ARCH=$(uname -m)
|
|
|
|
# Normalize architecture
|
|
case $ARCH in
|
|
x86_64|amd64) ARCH="amd64" ;;
|
|
aarch64|arm64) ARCH="arm64" ;;
|
|
armv7l) ARCH="arm" ;;
|
|
*) echo "Unsupported architecture: $ARCH"; exit 1 ;;
|
|
esac
|
|
|
|
# Normalize OS
|
|
case $OS in
|
|
darwin) OS="darwin" ;;
|
|
linux) OS="linux" ;;
|
|
*) echo "Unsupported OS: $OS"; exit 1 ;;
|
|
esac
|
|
|
|
# Determine install directory
|
|
if [ "$EUID" -eq 0 ] || [ "$(id -u)" -eq 0 ]; then
|
|
INSTALL_DIR="/usr/local/bin"
|
|
else
|
|
INSTALL_DIR="$HOME/.local/bin"
|
|
mkdir -p "$INSTALL_DIR"
|
|
fi
|
|
|
|
echo "Installing micro ${VERSION} for ${OS}/${ARCH}..."
|
|
|
|
# Download URL
|
|
if [ "$VERSION" = "latest" ]; then
|
|
URL="https://github.com/micro/go-micro/releases/latest/download/micro-${OS}-${ARCH}"
|
|
else
|
|
URL="https://github.com/micro/go-micro/releases/download/${VERSION}/micro-${OS}-${ARCH}"
|
|
fi
|
|
|
|
# Download
|
|
TMP_FILE=$(mktemp)
|
|
if command -v curl &> /dev/null; then
|
|
curl -fsSL "$URL" -o "$TMP_FILE"
|
|
elif command -v wget &> /dev/null; then
|
|
wget -q "$URL" -O "$TMP_FILE"
|
|
else
|
|
echo "Error: curl or wget required"
|
|
exit 1
|
|
fi
|
|
|
|
# Install
|
|
chmod +x "$TMP_FILE"
|
|
mv "$TMP_FILE" "$INSTALL_DIR/micro"
|
|
|
|
echo ""
|
|
echo "✓ Installed micro to $INSTALL_DIR/micro"
|
|
echo ""
|
|
|
|
# Verify
|
|
if command -v micro &> /dev/null; then
|
|
micro --version
|
|
else
|
|
echo "Note: Add $INSTALL_DIR to your PATH:"
|
|
echo " export PATH=\"\$PATH:$INSTALL_DIR\""
|
|
fi
|
|
|
|
echo ""
|
|
echo "Get started:"
|
|
echo " micro new myservice # Create a new service"
|
|
echo " micro run # Run locally"
|
|
echo " micro deploy # Deploy to server"
|
|
echo ""
|