Skip to content

AmRo045/OutlineAdmin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Outline Logo

Outline Admin

Outline Admin is a web interface for the Outline Manager API, providing a simple and user-friendly UI for managing VPN servers.

Build CodeQL Docker Pulls

Note

The previous PHP/Laravel version of this project has been moved to the OutlineAdminLaravel repository.

Table of Contents

  1. Added Features
  2. Installation
  3. Nginx Integration
  4. Updating to Latest Version
  5. Development
  6. Admin Password
  7. Donation
  8. Screenshots

Added Features

The following features have been added to extend the functionality of the Outline Manager API:

Dynamic Access Keys

Dynamic Access Keys (DAKs) provide a flexible way to manage Outline access keys by dynamically creating, deleting, and updating them as needed. This allows the connection configuration to be updated without regenerating or redistributing new keys.

In Outline Admin, DAKs are enhanced beyond the official Outline implementation, adding automated management and server pooling features.

Self-Managed DAKs

A Self-Managed DAK automatically manages its associated access keys. When a client requests access and no key exists, the system will create one on demand. If a key expires or reaches its data limit, the underlying access keys will be removed automatically. Example of an auto-generated access key name: self-managed-dak-access-key-{dak_id}. These access keys are hidden in Outline Admin but remain visible in Outline Manager.

Self-Managed DAKs use a server pool to decide where to create new access keys. You can choose how this pool is formed using one of the following modes:

Self-Managed DAKs use a server pool to decide where to create new access keys. You can choose how this pool is formed using one of the following modes:

Manual Server Selection

In this mode, available servers are listed, and you can manually select one or more servers to include in the server pool. When the DAK creates an access key automatically, it will select one of these servers.

Tag-Based Server Selection

Instead of manually selecting servers, you can assign tags to servers (for example, EU, US, High-Speed, or Irancell). When creating a Self-Managed DAK, you can choose which tags to include. The DAK will then automatically use all servers matching those tags to form its pool.

Manual DAKs

A Manual DAK does not automatically create or remove access keys. Instead, the admin attach/detach access keys manually — similar to the official Outline dynamic access keys.

Health Check

Outline Admin includes an automated Health Check system to monitor the status and availability of your servers.

When you add a new server to Outline Admin, a health check is automatically created for that server. You can configure the check interval (how often the server is tested) and notification cooldown (how long to wait before sending another alert) in the Health Checks section.

Notification Channels

To ensure you’re promptly informed about server issues, Outline Admin lets you define and manage notification channels.

For example, you can set up a Telegram notification channel and link it to your server’s health check. If the server becomes unreachable or fails its check, Outline Admin will automatically send a notification through your chosen channel.

Expiration Date

Outline Admin lets you set an expiration date for both standard access keys and dynamic access keys. When an access key reaches its expiration date, it will be automatically disabled, preventing any further connections.

Tags

Tags provide a simple and flexible way to organize and group servers in Outline Admin. You can assign one or more tags to each server — for example, EU, US, Asia, High-Speed or Irancell.

Prefix

Prefixes allow you to disguise Shadowsocks connections so they appear similar to other allowed network protocols. This helps bypass firewalls that block or inspect encrypted traffic by making Outline connections look like familiar protocols such as HTTP, TLS, DNS, or SSH.

A prefix is a short sequence of bytes added at the start of a Shadowsocks connection. The port number used should typically match the protocol that the prefix is mimicking — for example, port 80 for HTTP or 443 for HTTPS.

In Outline Admin, prefixes can be configured for both static and dynamic access keys. Admins can define and assign prefixes to help users connect more reliably in restricted networks.

Example use cases:

Simulate HTTP requests ("POST " → port 80)

Simulate TLS traffic ("\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" → port 443)

Simulate SSH handshakes ("SSH-2.0\r\n" → port 22)

Note

Prefixes should be no longer than 16 bytes. Longer prefixes can cause salt collisions, which may reduce encryption safety.


Installation

Docker

Before installing Outline Admin, ensure that Docker and Docker Compose are installed on your machine. Use the following commands to start the container:

docker run -d -p 3000:3000 --name outline-admin -v ./oa_data:/app/data -v ./logs:/app/logs --restart unless-stopped amro045/outline-admin:latest

Docker Compose

To simplify the installation, you can use a Docker Compose file:

wget -O docker-compose.yml https://raw.githubusercontent.com/AmRo045/OutlineAdmin/main/docker-compose.yml
docker compose up -d

or

docker-compose up -d

NodeJS

To run this project on your machine, ensure you have Node.js v20 or later and npm v10 or later installed. Follow the steps below to set up Outline Admin using Node.js:

Step 1: Prepare the project files

git clone https://github.com/AmRo045/OutlineAdmin.git
cd OutlineAdmin
cp .env.example .env

Step 2: Install dependencies

npm install

Step 3: Create the database

npx prisma migrate deploy 
npx prisma generate

Step 4: Build the project

npm run compile
npm run setup 
npm run build

Step 5: Start the application

cd .next/standalone
node server.js

Nginx Integration

If you want to expose Outline Admin over HTTPS using your own domain, the recommended approach is to run it behind Nginx as a reverse proxy.

Below is an example Nginx configuration you can use as a starting point:

server {
    listen 443 ssl;
    server_name your-outline-admin-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-outline-admin-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-outline-admin-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:3000;

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

server {
    listen 80;
    server_name your-outline-admin-domain.com;

    return 301 https://$host$request_uri;
}

Updating to Latest Version

Pull the latest version of the outline-admin image

docker pull amro045/outline-admin:latest

Stop running container

docker compose down

Restart the container

docker compose up -d

Clean up the old image to free up disk space

docker rmi {old-image-id}

Replace {old-image-id} with the ID of the old image you want to remove.


Development

Follow the steps below:

Step 1: Prepare the project files

git clone https://github.com/AmRo045/OutlineAdmin.git
cd OutlineAdmin
cp .env.example .env

Step 2: Install dependencies

npm install

Step 3: Create the database

npx prisma db push
npx prisma generate

Step 4: Build the project

npm run compile
npm run setup

Step 5: Start the application

npm run dev

Admin Password

To update the admin user password, use one of the following commands.

For Docker containers:

docker exec -it outline-admin npm run password:change "your new password"

For non-Docker setup:

npm run password:change "your new password"

Donation

If you find this project useful and would like to support its development, consider making a donation. Your support is greatly appreciated!

BTC

bc1qjmnnw4779ntv08uuqmpqnx7hqmygl08z4z500a

USDT

0xCcF2117F837b16fbc0FbDe0178De0a2aCbfadC58

TON

UQByW0gL9r89D4oFagC3ZRCEctIoh6XjHu7zv5xU2wcPVATT

ETH

0xCcF2117F837b16fbc0FbDe0178De0a2aCbfadC58

Screenshots

Login Servers New server Server settings Server metrics Server access keys Dynamic access keys New dynamic access key Health checks Notification channels New notification channels Tags