Skip to main content
Version: 3.x

Practice Guide

Security Practice Guide

Note that there is no absolute security. If the environment allows, try to deploy Spug in the intranet and prohibit public network access. If you must access the public network, try to limit access to specified IP through firewall and other means.

Spug provides the function of automatically disabling the account after three consecutive incorrect passwords to avoid the possibility of being brute-force cracked. In the Token security policy, the security policy based on the access source IP is provided. When the access source IP of the same Token changes, the Token will automatically become invalid and force a re-login (after v3.0.2, you can turn off this feature through the system settings).


Token security policy relies on the HTTP header X-Real-IP and X-Forwarded-For forwarded by Nginx when forwarding requests (v2.3.12+), so please make sure that Spug can get the real IP of the user instead of the proxy IP of the upper level. If you use the recommended Docker deployment method, these jobs have been done by default. If you want to add a reverse proxy layer on the 80 port exposed by the Docker container, please configure X-Forwarded-For correctly, for example, add proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; to Nginx.

When it is impossible to verify the real IP of the visitor (the IP obtained by Spug is the internal network IP), a warning message will pop up when logging in. If Spug is deployed in the intranet and used only in the intranet (access Spug through the intranet address), you can turn off this feature in v2.3.14 and later by System Management / system Setup / Security Settings / Access IP Verification.

Different operations on different hosts during the release process

For example, an application needs to be deployed to three different hosts, but the deployment needs to execute some operations such as updating the database on the host, which can only be executed once and cannot be repeated. In this case, you can consider using the global variables SPUG_HOST_ID or SPUG_HOST_NAME provided by Spug to specify that these operations are only executed on a certain host, for example:

if [ "$SPUG_HOST_NAME" = "" ]; then
echo "exec sql"

Default PATH environment variable causes command not found problem

Default PATH variable may not be complete. If you encounter some command not found errors, you can use the following method to solve this problem:

# Add jdk to PATH variable
java -jar xxx.jar

Persistent storage of project data

The Project will generate some data that needs to be persisted during the running process, such as the images uploaded by the user or the log files that need to be retained. When using the conventional release, each version is a new directory, and by default these files will not be visible in the new version. In this case, you can consider placing these dynamically generated and persistent data outside the release directory and linking them to the project through the soft link, so that the actual file is stored in a common place. Each time you update, you only need to do an extra soft link mapping to solve the problem.

Command error handling in execution

Since Spug v3, Spug removes the set -e feature, keeping the same behavior as the default execution script. If you are sensitive to command errors during execution, such as expecting any command to fail and interrupt the subsequent commands, you can add set -e to the beginning of the command you write.

Use su to switch identity

By default, using the su command directly will cause the command to hang and cannot continue to execute. You can use su as follows to make it work normally:

su - ubuntu << EOF
echo 'By ubuntu user execution'